Communication instantanée
pour élèves
pilotes
sourds & malentendants
Julien Le Guen
2025-01-27
Fait du Rust
Fait de l’embarqué
Fait du parapente
Enseigne
N’a pas encore levé la main :)
?
Petit groupe, encadrés par deux moniteurs
Pratique
10 % de la formation
90 % restant ?
Initiation
Progression
Perfectionnement
Cross
SIV
…
Au début, découverte, petits vols, gestion du stress
Puis apprendre à rester en l’air
Puis apprendre à se déplacer, voyager !
Communication radio impossible.
Existant
Radios vibrantes (2 signaux possibles)
Lunettes à LED gauche/droite
Temps-réel : Vibrations
Consignes haut-niveau : Lunettes
Lien radio numérique
embedded-hal v1.0 🥳
Radios : cible ESP32 (xtensa)
Vibreurs : cible nRF52840 (arm cortex-M)
embassy EMBedded ASYnc :)Tests sur PC de dev et CI/CD
Réutiliser ce qui est possible
sx127x_driver,
infos_metier, …Limiter le code hardware-dependant
Traits :)
Traits (interfaces)
Ecosystème mature
embedded-halesp-rs, etc.“Si ça compile, ça marche”
Force les bonnes pratiques
Stage de 5 mois -> Jordan (néophyte) produit un système qui fonctionne !
Une seule paire de lunettes
Cycle relativement long (flasher la radio, reboot, connexion au lunettes, etc.)
Très manuel
Comment tester la crate activelook-rs ?
Comment mettre au point les écrans pour l’application finale ?
#[test]
fn test_packet_serialization() {
let expected = [0xFF, 0x00, 0x00, 0x06, 0x01, 0xAA];
let expected_cmd = Command::PowerDisplay { en: 1 };
let cmd = Command::PowerDisplay { en: 1 };
let packet = Packet::new(&cmd);
// Serialization
let bytes = packet.to_bytes();
assert_eq!(expected, bytes[..]);
// Deserialization
let newpkt = CommandPacket::from_bytes(&bytes).expect("Unable to deserialize");
assert_eq!(expected_cmd, newpkt.data);
}nannouactivelook-rs et le protocole BLE comme le vrai
HWjlg@jleguen.info
embedded-hal
Hardware Abstraction Layer (HAL) for embedded systems
deku
Declarative binary reading and writing
binrwnannou
Creative-coding toolkit
sx127x_lora
Low-level driver for Semtech SX127x
esp-rs Rust
on Espressif µC